/**
* <p>Title: commonUtils.java</p>
* <p>Description: 公共utils</p>
* <p>Company: www.huoyunren.com</p>
* @author duanxiangyun
* @date 2015年1月7日
* @version 1.0
*/
package com.smarttest.common.util;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
/**
 * 公共方法
 */
public class CommonUtils {
	
//	private static final String Current_DirPath = "Current_DirPath";
//	private static final String common_file = "utilities.properties";
//	private static final String currentClsPath =Thread.currentThread().getContextClassLoader().getResource(".").getPath();
//	/**
//	 * 判断字符串是否为空或者NULL
//	 * @param str 字符串
//	 * @return Boolean
//	 */
//	public static Boolean isStrEmpty (String str) {
//		if(str == null || str.trim().length() == 0){
//		    return true;
//		  }
//		else {
//			return false;
//		}
//	}
//	
//
//	/**
//	 * 获得eclips相对路径(在web工程中运行该工程可能会出现问题,建议使用getFilePath代替)
//	 * @param filePath 项目下文件路径
//	 * @return String
//	 */
//	public static String getFilePath2 (String filePath) {
//		Properties pro = new Properties();
//		try {
//			pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(common_file ));
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}		
//		String currentDir=System.getProperty(pro.getProperty(Current_DirPath));
//		return currentDir + filePath;
//	}
//	/**
//	 * 获得eclips相对路径
//	 * @param filePath 项目下文件路径
//	 * @return String
//	 */
//	public static String getFilePath (String filePath) {
//    	String clspath;
//		try {
//			clspath = URLDecoder.decode(currentClsPath,"utf-8");
//			String a = "";
//			if (clspath.contains("/bin/")) {
//				a = clspath.substring(1, clspath.indexOf("/bin"));
//			}
//			else if (clspath.contains("/build/")) {
//				a = clspath.substring(1, clspath.indexOf("/build"));
//			}
//			else {
//				return null;
//			}
//	    	return a + filePath;
//		} catch (UnsupportedEncodingException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//			return null;
//		}	
//	}
//	/**
//	 * 比较时间先后
//	 * @param date1 date1
//	 * @param date2 date2
//	 * @param dateFormat 期望格式
//	 * @return true:date1在date2之前;else:false.
//	 */
//	public static Boolean isBeforeDate (String date1, String date2, String dateFormat) { 
//		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.CHINA);
//		Date d1 = null;
//		Date d2 = null;
//		try {
//			d1 = sdf.parse(date1);
//			d2 = sdf.parse(date2);
//		} catch (ParseException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return d1.before(d2);
//	}
//	
//	/**
//     * 把文本编码为Html代码
//     * @param target html代码
//     * @return 编码后的字符串
//     */
//    public static String htmEncode(String target)
//    {
//        StringBuffer stringbuffer = new StringBuffer();
//        int j = target.length();
//        for (int i = 0; i < j; i++)
//        {
//            char c = target.charAt(i);
//            switch (c)
//            {
//            case 60:
//                stringbuffer.append("<");
//                break;
//            case 62:
//                stringbuffer.append(">");
//                break;
//            case 38:
//                stringbuffer.append("&");
//                break;
//            case 34:
//                stringbuffer.append("\"");
//                break;
//            case 169:
//                stringbuffer.append("©");
//                break;
//            case 174:
//                stringbuffer.append("®");
//                break;
//            case 165:
//                stringbuffer.append("¥");
//                break;
//            case 8364:
//                stringbuffer.append("€");
//                break;
//            case 8482:
//                stringbuffer.append("™");
//                break;
//            case 13:
//                if (i < j - 1 && target.charAt(i + 1) == 10)
//                {
//                    stringbuffer.append("<br>");
//                    i++;
//                }
//                break;
//            case 32:
//                if (i < j - 1 && target.charAt(i + 1) == ' ')
//                {
//                    stringbuffer.append(" &nbsp;");
//                    i++;
//                    break;
//                }
//            default:
//                stringbuffer.append(c);
//                break;
//            }
//        }
//        return new String(stringbuffer.toString());
//    }
//    /**
//     * time格式转换
//     * @param time
//     * @return String
//     * @throws ParseException
//     */
//    public static String timeFormatChange (String time, String format1, String format2) throws ParseException {
//    	Date date;
//    	SimpleDateFormat date1 = new SimpleDateFormat(format1);//"yy-MM-dd HH:mm"
//    	date = date1.parse(time);
//    	SimpleDateFormat date2 = new SimpleDateFormat(format2);//"yyyy-MM-dd HH:mm:ss"
//    	return date2.format(date);
//    }
    /**
     * 获得当前时间:yyyy-MM-dd HH:mm:ss
     * @return String
     * @throws ParseException
     */
    public static String getNow () throws ParseException {
    	Date date = new Date();
    	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//"yy-MM-dd HH:mm"
    	return df.format(date);
    }
    /**
     * 获得当前时间
     * @return String
     * @throws ParseException
     */
    public static String getNow (String timeformat) throws ParseException {
    	Date date = new Date();
    	SimpleDateFormat df = new SimpleDateFormat(timeformat);
    	return df.format(date);
    }
//    /**
//     * 时分秒转为秒数
//     * @param timeStr 时间字符串
//     * @return int
//     */
//    public static int HMSToSeconds (String timeStr) {
//    	int second = 0;
//    	String time = timeStr.replaceAll(" ", "").trim();
//    	int temp1;
//    	int temp2 = time.indexOf("分");
//    	int temp3 = time.indexOf("秒");
//    	if (-1 != time.indexOf("小时")) {
//    		temp1 = time.indexOf("小时");      	
//        	second += Integer.parseInt(time.substring(0, temp1)) * 3600;        	
//        	second += Integer.parseInt(time.substring(temp1 + 2, temp2)) * 60;        	
//        	second += Integer.parseInt(time.substring(temp2 + 1, temp3));
//    	}
//    	else {
//    		temp1 = time.indexOf("时");
//    		if (-1 != temp1) {
//        		second += Integer.parseInt(time.substring(0, temp1)) * 3600;
//        	}
//        	if (-1 != temp2) {
//        		if (-1 != temp1) {
//        			second += Integer.parseInt(time.substring(temp1 + 1, temp2)) * 60;
//        		}
//        		else {
//        			second += Integer.parseInt(time.substring(0, temp2)) * 60;
//        		}
//        	}
//        	if (-1 != temp3) {
//        		if (-1 != temp2) {
//        			second += Integer.parseInt(time.substring(temp2 + 1, temp3));
//            	}
//        		else {
//        			second += Integer.parseInt(time.substring(0, temp3));
//        		}
//        	}
//    	}
//    	
//    	return second;
//    }
//    
//    /** 
//     * 计算两个日期之间相差的天数 
//     * @param date1 
//     * @param date2 
//     * @return  int
//     * @throws ParseException 
//     */  
//    public static int daysBetween(String date2,String date1) throws ParseException  
//    {  
//    	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//        Calendar cal = Calendar.getInstance();  
//        cal.setTime(df.parse(date1));  
//        long time1 = cal.getTimeInMillis();               
//        cal.setTime(df.parse(date2)); 
//        long time2 = cal.getTimeInMillis();       
//        double between_days=Math.ceil((double)(time2-time1)/(1000*3600*24));  
//       return (new Double(between_days)).intValue();         
//    }
    /**
     * 在package对应的路径下找到所有的class
     * 
     * @param packageName
     *            package名称
     * @param recursive
     *            是否查找子package
     * @throws ClassNotFoundException 
     */
    @SuppressWarnings("rawtypes")
	public static List<Class> findClassInPackageByFile(String packageName,final boolean recursive) {
 	   List<Class> clazzs = new ArrayList<Class>();
 	   String packagepath = packageName.replaceAll("\\.", "/");
 	   System.out.println("开始查询相关文件:======================================");
 	   String s = Thread.currentThread().getContextClassLoader().getResource(".").getPath();
 	   String os = System.getProperty("os.name");  
 	   String filedic = "";
 	   if (os != null && os.toLowerCase().indexOf("linux") > -1) {
 		  filedic = s.substring(0, s.length())+packagepath;
 	   }	
 	   else if(os != null &&  os.toLowerCase().startsWith("win")){  
 		  filedic = s.substring(0, s.length())+packagepath;
 	   }
 	   File dir = new File(filedic);
 	   System.out.println(s.substring(1, s.length())+packagepath);
    	if (!dir.exists() || !dir.isDirectory()) {
    		System.out.println("can not found this Directory");
    		return null;
    	}
    	// 在给定的目录下找到所有的文件，并且进行条件过滤
    	File[] dirFiles = dir.listFiles(new FileFilter() {

    		@Override
    		public boolean accept(File file) {
    			boolean acceptDir = recursive && file.isDirectory();// 接受dir目录
    			boolean acceptClass = file.getName().endsWith("class");// 接受class文件
    			return acceptDir || acceptClass;
    		}
    	});

    	for (File file : dirFiles) {
    		if (file.isDirectory()) {
    			clazzs = findClassInPackageByFile(packageName + "." + file.getName(), recursive);
    		} else {
    			String className = file.getName().substring(0, file.getName().length() - 6);
    			try {
    				clazzs.add(Thread.currentThread().getContextClassLoader().loadClass(packageName + "." + className));
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	return clazzs;
    }
}
